package com.fiume.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fiume.dto.CheckgroupDto;
import com.fiume.mapper.CheckgroupMapper;
import com.fiume.pojo.CheckGroupItemT;
import com.fiume.pojo.CheckgroupT;
import com.fiume.service.CheckGroupItemService;
import com.fiume.service.CheckgroupService;
import com.fiume.support.PageResult;
import com.fiume.support.QueryPageBean;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * Description:
 * </p>
 *
 * @author fiume
 * @version v1.0.0
 * @create 2021-01-04 18:35
 * @see com.fiume.service.impl
 */
@DubboService
public class CheckgroupServiceImpl extends ServiceImpl<CheckgroupMapper, CheckgroupT> implements CheckgroupService {

    @Resource
    private CheckGroupItemService checkGroupItemService;

    @Override
    public PageResult findByPage(QueryPageBean queryPageBean) {
        Page<CheckgroupT> result = this.page(new Page<CheckgroupT>(queryPageBean.getCurrentPage(), queryPageBean.getPageSize()));
        return new PageResult(result.getTotal(), result.getRecords());
    }

    @Override
    @Transactional
    public Boolean saveGroup(CheckgroupDto checkgroupDto) {
        //1,对CheckGroup表进行操作
        this.saveOrUpdate(checkgroupDto.getCheckgroupT());
        //2.对CheckGroupItem表操作
        //2.1 判断起码勾选了一个复选框
        /*
        //通过循环逐条查询数据,对数据库性能消耗较大
        if (checkgroupDto.getCheckitemIds() != null){
            //2.2将CheckitemIds属性遍历,获得检查项id
            for (Long checkitemId : checkgroupDto.getCheckitemIds()) {
                //2.3 维护关系表
                CheckGroupItemT checkGroupItemT = new CheckGroupItemT();
                //2.4 将检查项id和检查组id封装到对象中
                checkGroupItemT.setItemId(checkitemId);
                checkGroupItemT.setGroupId(checkgroupDto.getCheckgroupT().getId());

                //此处需要用到的是CheckGroupItemT对象,但是类传入的是CheckGroup对象,故需要导入前者的Mapper,但是出于层级间(业务层和持久层)的跨层现象的考虑,我们调用前者的Service.
                checkGroupItemService.save(checkGroupItemT);

            }
        }*/
        //优化业务
        if (checkgroupDto.getCheckitemIds() != null){
            List<CheckGroupItemT> checkGroupItemTS = new ArrayList<>();
            //2.2将CheckitemIds属性遍历,获得检查项id
            for (Long checkitemId : checkgroupDto.getCheckitemIds()) {
                //2.3 维护关系表
                CheckGroupItemT checkGroupItemT = new CheckGroupItemT();
                //2.4 将检查项id和检查组id封装到对象中
                checkGroupItemT.setItemId(checkitemId);
                checkGroupItemT.setGroupId(checkgroupDto.getCheckgroupT().getId());

                //此处需要用到的是CheckGroupItemT对象,但是类传入的是CheckGroup对象,故需要导入前者的Mapper,但是出于层级间(业务层和持久层)的跨层现象的考虑,我们调用前者的Service.
                checkGroupItemTS.add(checkGroupItemT);
            }
            checkGroupItemService.saveBatch(checkGroupItemTS);
        }

        return true;
    }
}
